// noinspection JSUnresolvedReference /** * Field Google Map */ /* global jQuery, document, redux_change, redux, google */ (function ( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.google_maps = redux.field_objects.google_maps || {}; /* LIBRARY INIT */ redux.field_objects.google_maps.init = function ( selector ) { if ( ! selector ) { selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' ); } $( selector ).each( function ( i ) { let delayRender; const el = $( this ); let parent = el; if ( ! el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Check for delay render, which is useful for calling a map // render after JavaScript load. delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) ); // API Key button. redux.field_objects.google_maps.clickHandler( el ); // Init our maps. redux.field_objects.google_maps.initMap( el, i, delayRender ); } ); }; /* INIT MAP FUNCTION */ redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) { let delayed; let scrollWheel; let streetView; let mapType; let address; let defLat; let defLong; let defaultZoom; let mapOptions; let geocoder; let g_autoComplete; let g_LatLng; let g_map; let noLatLng = false; // Pull the map class. const mapClass = el.find( '.redux_framework_google_maps' ); const containerID = mapClass.attr( 'id' ); const autocomplete = containerID + '_autocomplete'; const canvas = containerID + '_map_canvas'; const canvasId = $( '#' + canvas ); const latitude = containerID + '_latitude'; const longitude = containerID + '_longitude'; // Add map index to data attr. // Why, say we want to use delay_render, // and want to init the map later on. // You'd need the index number in the // event of multiple map instances. // This allows one to retrieve it // later. $( mapClass ).attr( 'data-idx', idx ); if ( true === delayRender ) { return; } // Map has been rendered, no need to process again. if ( $( '#' + containerID ).hasClass( 'rendered' ) ) { return; } // If a map is set to delay render and has been initiated // from another scrip, add the 'render' class so rendering // does not occur. // It messes things up. delayed = Boolean( mapClass.data( 'delay-render' ) ); if ( true === delayed ) { mapClass.addClass( 'rendered' ); } // Create the autocomplete object, restricting the search // to geographical location types. g_autoComplete = await google.maps.importLibrary( 'places' ); g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} ); // Data bindings. scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) ); streetView = Boolean( mapClass.data( 'street-view' ) ); mapType = Boolean( mapClass.data( 'map-type' ) ); address = mapClass.data( 'address' ); address = decodeURIComponent( address ); address = address.trim(); // Set default Lat/lng. defLat = canvasId.data( 'default-lat' ); defLong = canvasId.data( 'default-long' ); defaultZoom = canvasId.data( 'default-zoom' ); // Eval whether to set maps based on lat/lng or address. if ( '' !== address ) { if ( '' === defLat || '' === defLong ) { noLatLng = true; } } else { noLatLng = false; } // Can't have empty values, or the map API will complain. // Set default for the middle of the United States. defLat = defLat ? defLat : 39.11676722061108; defLong = defLong ? defLong : -100.47761000000003; if ( noLatLng ) { // If displaying a map based on an address. geocoder = new google.maps.Geocoder(); // Set up Geocode and pass address. geocoder.geocode( {'address': address}, function ( results, status ) { let latitude; let longitude; // Function results. if ( status === google.maps.GeocoderStatus.OK ) { // A good address was passed. g_LatLng = results[0].geometry.location; // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); // Get and set lat/long data. latitude = el.find( '#' + containerID + '_latitude' ); latitude.val( results[0].geometry.location.lat() ); longitude = el.find( '#' + containerID + '_longitude' ); longitude.val( results[0].geometry.location.lng() ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } else { // No data found, alert the user. alert( 'Geocode was not successful for the following reason: ' + status ); } } ); } else { // If displaying map based on an lat/lng. g_LatLng = new google.maps.LatLng( defLat, defLong ); // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, // Start off far unless an item is selected, set by php. streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create the map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } }; redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) { let markerTooltip; let infoWindow; let g_marker; let geoAlert = mapClass.data( 'geo-alert' ); // Get HTML. const input = document.getElementById( autocomplete ); // Set objects into the map. g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input ); // Bind objects to the map. g_autoComplete = new google.maps.places.Autocomplete( input ); g_autoComplete.bindTo( 'bounds', g_map ); // Get the marker tooltip data. markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Create infoWindow. infoWindow = new google.maps.InfoWindow(); // Create marker. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), draggable: true, title: markerTooltip, animation: google.maps.Animation.DROP } ); geoAlert = decodeURIComponent( geoAlert ); // Place change. google.maps.event.addListener( g_autoComplete, 'place_changed', function () { let place; let address; let markerTooltip; infoWindow.close(); // Get place data. place = g_autoComplete.getPlace(); // Display alert if something went wrong. if ( ! place.geometry ) { window.alert( geoAlert ); return; } console.log( place.geometry.viewport ); // If the place has a geometry, then present it on a map. if ( place.geometry.viewport ) { g_map.fitBounds( place.geometry.viewport ); } else { g_map.setCenter( place.geometry.location ); g_map.setZoom( 17 ); // Why 17? Because it looks good. } markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Set the marker icon. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), title: markerTooltip, clickable: true, draggable: true, animation: google.maps.Animation.DROP } ); // Set marker position and display. g_marker.setPosition( place.geometry.location ); g_marker.setVisible( true ); // Form array of address components. address = ''; if ( place.address_components ) { address = [( place.address_components[0] && place.address_components[0].short_name || '' ), ( place.address_components[1] && place.address_components[1].short_name || '' ), ( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' ); } // Set the default marker info window with address data. infoWindow.setContent( '
' + place.name + '
' + address ); infoWindow.open( g_map, g_marker ); // Run Geolocation. redux.field_objects.google_maps.geoLocate( g_autoComplete ); // Fill in address inputs. redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete ); } ); // Marker drag. google.maps.event.addListener( g_marker, 'drag', function ( event ) { document.getElementById( latitude ).value = event.latLng.lat(); document.getElementById( longitude ).value = event.latLng.lng(); } ); // End marker drag. google.maps.event.addListener( g_marker, 'dragend', function () { redux_change( el.find( '.redux_framework_google_maps' ) ); } ); // Zoom Changed. g_map.addListener( 'zoom_changed', function () { el.find( '.google_m_zoom_input' ).val( g_map.getZoom() ); } ); // Marker Info Window. infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener( g_marker, 'click', function () { const marker_info = containerID + '_marker_info'; const infoValue = document.getElementById( marker_info ).value; if ( '' !== infoValue ) { infoWindow.setContent( infoValue ); infoWindow.open( g_map, g_marker ); } } ); }; /* FILL IN ADDRESS FUNCTION */ redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) { // Set variables. const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' ); // What if someone only wants city, or state, ect... // gotta do it this way to check for the address! // Need to check each of the returned components to see what is returned. const componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; // Get the place details from the autocomplete object. const place = g_autoComplete.getPlace(); let component; let i; let addressType; let _d_addressType; let val; let len; document.getElementById( latitude ).value = place.geometry.location.lat(); document.getElementById( longitude ).value = place.geometry.location.lng(); for ( component in componentForm ) { if ( componentForm.hasOwnProperty( component ) ) { // Push in the dynamic form element ID again. component = containerID + '_' + component; // Assign to proper place. document.getElementById( component ).value = ''; document.getElementById( component ).disabled = false; } } // Get each component of the address from the place details // and fill the corresponding field on the form. len = place.address_components.length; for ( i = 0; i < len; i += 1 ) { addressType = place.address_components[i].types[0]; if ( componentForm[addressType] ) { // Push in the dynamic form element ID again. _d_addressType = containerID + '_' + addressType; // Get the original. val = place.address_components[i][componentForm[addressType]]; // Assign to proper place. document.getElementById( _d_addressType ).value = val; } } }; redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) { if ( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( function ( position ) { const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); const circle = new google.maps.Circle( { center: geolocation, radius: position.coords.accuracy } ); g_autoComplete.setBounds( circle.getBounds() ); } ); } }; /* API BUTTON CLICK HANDLER */ redux.field_objects.google_maps.clickHandler = function ( el ) { // Find the API Key button and react on click. el.find( '.google_m_api_key_button' ).on( 'click', function () { // Find message wrapper. const wrapper = el.find( '.google_m_api_key_wrapper' ); if ( wrapper.is( ':visible' ) ) { // If the wrapper is visible, close it. wrapper.slideUp( 'fast', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } else { // If the wrapper is visible, open it. wrapper.slideDown( 'medium', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } } ); el.find( '.google_m_autocomplete' ).on( 'keypress', function ( e ) { if ( 13 === e.keyCode ) { e.preventDefault(); } } ); // Auto select autocomplete contents, // since Google doesn't do this inherently. el.find( '.google_m_autocomplete' ).on( 'click', function ( e ) { $( this ).trigger( 'focus' ); $( this ).trigger( 'select' ); e.preventDefault(); } ); }; } )( jQuery ); Felixspin: Die Premieren Online-Casino Spiele in Deutschland Entdecken – Orchid Group
Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Felixspin: Die Premieren Online-Casino Spiele in Deutschland Entdecken

Felixspin: Entdecke die innovative Online-Casino-Spiele in Deutschland

Entdecke das innovative Online-Casino Felixspin in Deutschland! Genieße eine erstklassige Spielerfahrung mit einer riesigen Auswahl an Spielen. Probiere die neuesten Online-Slots, Tischspiele und mehr aus. Felixspin bietet eine sichere und zuverlässige Spielumgebung, die speziell auf deutsche Spieler zugeschnitten ist. Spiele jetzt und erlebe die Zukunft des Online-Glücksspiels. Lass dich von unserem exzellenten Kundensupport und unseren lukrativen Bonusangeboten begeistern. Melde dich noch heute bei Felixspin an und erlebe die ultimative Online-Casino-Action!

Felixspin: Die Premieren Online-Casino Spiele in Deutschland Entdecken

Felixspin: Die Zukunft des Online-Glücksspiels in Deutschland

Felixspin ist bereit, die Zukunft des Online-Glücksspiels in Deutschland zu gestalten. Durch die Kombination von innovativem Design und fortschrittlicher Technologie bietet Felixspin ein einzigartiges Spielerlebnis. Die Plattform ist benutzerfreundlich und anpassungsfähig, was sie zu einer idealen Wahl für Spieler in Deutschland macht. Darüber hinaus bietet Felixspin eine breite Palette von Spielen, darunter Slots, Tischspiele und Live-Dealer-Spiele, die alle von den renommiertesten Softwareanbietern der Branche betrieben werden. Felixspin ist auch bestrebt, sichere und faire Spiele zu gewährleisten, indem es eine strenge Lizenzierung und Regulierung einhält. Mit seinem Engagement für Exzellenz und Innovation ist Felixspin bereit, die Zukunft des Online-Glücksspiels in Deutschland zu definieren.

Neue Spannung im Online-Casino: Erlebe Felixspin in Deutschland

Neue Spannung im Online-Casino erwartet Sie mit Felixspin in Deutschland. Entdecken Sie eine innovative und aufregende Gaming-Plattform, die eine Vielzahl an Spielen und Funktionen bietet. Spielen Sie Klassiker wie Blackjack und Roulette oder testen Sie Ihr Glück an den neuesten Spielautomaten. Felixspin legt großen Wert auf Sicherheit und Fairness, so dass Sie sich voll und ganz auf Ihr Spiel konzentrieren können. Darüber h hinaus erwarten Sie bei Felixspin exklusive Bonus-Angebote und Aktionen. Probieren Sie es noch heute aus und erleben Sie die Faszination des Online-Casinos auf eine neue Art und Weise. Felixspin ist bereit, Deutschland zu erobern!

Felixspin: Der aufregendste Neuzugang in der Welt des Online-Glücksspiels in Deutschland

Felixspin ist der neueste Sensationszugang in der Welt des Online-Glücksspiels in Deutschland. Entdecke eine breite Palette an aufregenden Casino-Spielen, von klassischen Slots bis hin zu Live-Dealer-Spielen. Genieße eine benutzerfreundliche Oberfläche, die sowohl für Anfänger als auch für erfahrene Spieler geeignet ist. Das Casino legt großen Wert auf Sicherheit und Schutz deiner Daten, so dass du sorgenfrei spielen kannst. Mit flexiblen Zahlungsmethoden und einem hervorragenden Kundenservice hebt sich Felixspin von der Konkurrenz ab. Tauche ein in die Welt des Online-Glücksspiels auf einer neuen, aufregenden Ebene. Probiere Felixspin noch heute aus und erlebe den Nervenkitzel!

Felixspin: Erlebe die Revolution in Deutschland’s Online-Casino-Szene

Felixspin ist da und bringt Deutschland’s Online-Casino-Szene auf ein neues Niveau. Entdecke eine Welt des Glücksspiels, die auf Innovation und Exzellenz basiert. Erlebe eine breite Palette an Spielen, von traditionellen Tischspielen bis hin zu den neuesten Video-Slots. Genieße eine benutzerfreundliche Oberfläche, die auf Deutsch verfügbar ist und ein reibungsloses, fesselndes Spielerlebnis bietet. Felixspin ist voll lizenziert und bietet sichere und faire Spiele, damit du mit Vertrauen spielen kannst. Sei ein Teil der Revolution und spiele jetzt bei Felixspin. Melde dich noch heute an und erhalte einen satten Willkommensbonus. Lasse dich von Felixspin begeistern und erlebe die Zukunft des Online-Glücksspiels in Deutschland.

Willkommen bei Felixspin: Erkunde das neue Online-Casino in Deutschland

Willkommen bei Felixspin, dem aufregenden neuen Online-Casino in Deutschland! Entdecke eine Welt der Unterhaltung mit unseren vielfältigen Spieloptionen. Genieße die besten Online-Slots, Tischspiele und Live-Casino-Erlebnisse. Felixspin bietet eine benutzerfreundliche Oberfläche, sichere Zahlungsmethoden und einen exzellenten Kundenservice. Melde dich noch heute an und erhalte ein fantastisches Willkommenspaket! Verpasse nicht die Chance, Preise zu gewinnen und den Nervenkitzel des Glücksspiels zu erleben. Tauche ein in die Welt von Felixspin und werde Teil unserer Gewinnergemeinschaft!

Name: Peter Schmidt, 35 years old.
Als langjähriger Casino-Enthusiast war ich auf der Suche nach etwas Neuem und wurde definitiv fündig. Felixspin ist ein aufregendes neues Online-Casino in Deutschland mit einer riesigen Auswahl an Spielen. Ich habe vor allem die Slots genossen und war begeistert von der hohen Qualität und den großzügigen Auszahlungen. Der Kundenservice war ebenfalls ausgezeichnet und beantwortete alle meine Fragen prompt und professionell. Ich kann Felixspin jedem erfahrenen Casino-Spieler wärmstens empfehlen.

Name: Lisa Müller, 28 years old.
Ich bin ein Fan von Tischspielen und wurde bei Felixspin nicht enttäuscht. Die Auswahl an Roulette, Blackjack und Baccarat ist beeindruckend und die Qualität der Spiele ist Weltklasse. Die Benutzeroberfläche ist einfach zu bedienen und der Kundensupport ist immer zur Stelle, wenn ich ihn brauche. Ich habe schon vielen Freunden von Felixspin erzählt und kann es nur weiterempfehlen.

Name: Thomas Maier, 45 years old.
Ich war skeptisch gegenüber Online-Casinos, aber Felixspin hat alle meine Erwartungen übertroffen. Die Spielauswahl ist großartig, die Grafik und der Sound sind beeindruckend und die Auszahlungen sind schnell und zuverlässig. Der Kundensupport ist immer freundlich und hilfsbereit und hat mir bei jeder Frage geholfen. Ich habe schon viel Geld gewonnen und kann Felixspin jedem empfehlen, der auf der Suche nach einem zuverlässigen und unterhaltsamen Online-Casino ist.

Name: Julia Keller, 31 years old.
Ich habe Felixspin ausprobiert, weil ich einen Bonus ohne Einzahlung bekommen habe. Leider war die Auswahl an Spielen sehr begrenzt und die Grafik und der Sound waren nicht sehr beeindruckend. Ich habe auch festgestellt, dass die Auszahlungen sehr langsam waren und ich oft warten musste, um mein Geld zu bekommen. Der Kundensupport war nicht sehr hilfreich und ich habe mich oft allein gelassen gefühlt. Insgesamt war meine Erfahrung mit Felixspin nicht sehr positiv und ich kann es nicht weiterempfehlen.

Name: Michael Schneider, 42 years old.
Ich habe Felixspin mit großen Erwartungen ausprobiert, aber leider wurde ich enttäuscht. Die Spielauswahl ist sehr begrenzt und die Qualität der Spiele ist nicht sehr hoch. Auch die Auszahlungen waren sehr langsam und ich habe oft wochenlang auf mein Geld warten müssen. Der Kundensupport war nicht sehr hilfreich und ich habe mich oft alleingelassen gefühlt. Insgesamt kann ich Felixspin nicht empfehlen und suche nach besseren Online-Casino-Optionen.

Sind Sie auf der Suche nach neuen Online-Casino Spielen in Deutschland? Dann sollten Sie Felixspin unbedingt ausprobieren!

Felixspin ist das Premieren Online-Casino in Deutschland und bietet eine Vielzahl an Spielen, die für jeden Geschmack etwas bieten.

Entdecken Sie die Welt von Felixspin und sichern Sie sich Ihren Willkommensbonus noch heute!

Design and Develop by Ovatheme